package sistemaEnemigo;

import escenario.Escenario;
import escenario.IdPosicion;
import escenario.Misil;
import escenario.Posicion;

public class MisilEnemigo extends Misil {
	
	private IdPosicion idPos;
	private boolean alive = true;
	
	public MisilEnemigo(int id, Escenario es){
		this.setId(id);
		this.setEscenario(es);
		idPos = new IdPosicion(this.getId());
	}

	public IdPosicion getIdPos() {
		return idPos;
	}

	private void setIdpos(IdPosicion idPos){
		idPos.setX(this.getPosicionRel().getX() + this.getDestino().getX());
		idPos.setY(this.getPosicionRel().getY() + this.getDestino().getY());
		idPos.setZ(this.getPosicionRel().getZ());
		idPos.setXDest(this.getDestino().getX());
		idPos.setYDest(this.getDestino().getY());
		idPos.setZDest(this.getDestino().getZ());
	}
	
	public void setPosInicialRel(){
//		Objeto clase Posicion temporal para setear objeto posicionRel en Misil
		Posicion nueva = new Posicion();
		nueva.setX(this.getOrigen().getX());
		nueva.setY(this.getOrigen().getY());
		nueva.setZ(this.getOrigen().getZ());
		setPosicionRel(nueva);		
	}
	
	public void mover(){

		this.getPosicionRel().setRadio(this.getPosicionRel().getRadio() - 0.1);
		this.getPosicionRel().actualizarCartesianas();
//		Actualizamos el objeto posicion de AtributoEscenario con las posiciones Absolutas
		double xAbs = this.getPosicionRel().getX() + this.getDestino().getX();
		double yAbs = this.getPosicionRel().getY() + this.getDestino().getY();
		double zAbs = this.getPosicionRel().getZ();
		setPosicion(xAbs, yAbs, zAbs);
		this.getPosicion().actualizarEsfericas(xAbs, yAbs);
		this.getEscenario().setPosEnemigo(this.getId(), xAbs, yAbs, zAbs, 
				this.getDestino().getX(), this.getDestino().getY(),	this.getDestino().getZ());
//		printPosAbs();
	}
	
//	private void printPosAbs(){
//		System.out.println("Valores Absolutos:\n XAbs:" + truncate(this.getPosicion().getX()) + 
//				"   YAbs:" + truncate(this.getPosicion().getY()) + "   ZAbs:" + truncate(this.getPosicion().getZ()) + 
//				"   RAbs:" + truncate(this.getPosicion().getRadio()) + 
//				"   TitaAbs:" + truncate(Math.toDegrees(truncate(this.getPosicion().getTita()))) + 
//				"   FIAbs:" + truncate(Math.toDegrees(truncate(this.getPosicion().getFi()))));
//	}
//	
//	private static double truncate(double x){
//	    long y=(long)(x*100);
//	    return (double)y/100;
//	}
	
	private void cambiarEje(){
//	Calculamos el vector de trayectoria
		double x1, x2, y1, y2, z1, z2;
		double x, y, z, dX, dY, dZ;
		x1 = this.getOrigen().getX();
		y1 = this.getOrigen().getY();
		z1 = this.getOrigen().getZ();
		x2 = this.getDestino().getX();
		y2 = this.getDestino().getY();
		z2 = this.getDestino().getZ();
		x = x1 - x2;
		y = y1 - y2;
		z = z1 - z2;	
//		Actualizamos las posiciones del objeto posicionRel en Misil
		setPosicionRel(x, y, z);
//		Calculamos radio, tita y fi a partir del vector de trayectoria
		this.getPosicionRel().actualizarEsfericas(x, y);
//		Seteamos objeto posicion en AtributoEscenario (POSICION ABSOLUTA)
		dX = this.getDestino().getX();
		dY = this.getDestino().getY();
		dZ = this.getDestino().getZ();
		setPosicion(x+dX, y+dY, z+dZ);
		this.getPosicion().actualizarEsfericas(x+dX, y+dY);
		this.getEscenario().setPosEnemigo(this.getId(), x+dX, y+dY, z+dZ, x2, y2, z2);
	}
	
	@Override
	public void colision(){
		System.out.println("\nMISIL ENEMIGO: " + this.getId() + " dice ===================> IMPACTE");
		this.getEscenario().removePosEnemigo(this.getId());
        this.getEscenario().removeMisilEnemigo(this);
		alive = false;
	}
	
	public void run(){
		System.out.println("\nMISIL ENEMIGO dice ======================> Se ejecuto el MISIL ENEMIGO: " + this.getId());
		this.getEscenario().addMisilEnemigo(this);
		setIdpos(idPos);		
		this.getEscenario().addPosEnemigo(idPos);
		this.cambiarEje();
		while(this.getPosicionRel().getRadio() > 0 && alive){
			this.mover();
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
		if(alive){
			System.out.println("\nMISIL ENEMIGO: " + this.getId() + " dice ===================> Me Estrelle contra el piso");
			this.colision();
		}
	}	
}